<?php

App::uses('AppController', 'Controller');

/**
 * Insumos Controller
 *
 * @property Insumo $Insumo
 */
class MovimientosController extends AppController
{

    public $uses = array(
        'Movimiento',
        'Insumo',
        'Categoria',
        'Lugare',
        'Transferencia',
        'Migralmacen',
        'Categoria',
        'Tiposalida'
    );
    public $layout = 'pizza';

    public function beforeFilter()
    {
        parent::beforeFilter();
        $this->Auth->allow('*'); // We can remove this line after we�re finished
    }

    function _getUltimoMovimiento($idInsumo = null)
    {
        $movimiento = $this->Movimiento->find('first', array(
            'recursive' => -1,
            'fields' => array('MAX(id) as cod'),
            'conditions' => array('Movimiento.insumo_id' => $idInsumo)));
        $ultimoMovimiento = $this->Movimiento->find('first', array(
            'recursive' => -1,
            'fields' => array(
                'Movimiento.insumo_id',
                'Movimiento.ingreso',
                'Movimiento.salida',
                'Movimiento.total',
                'Movimiento.totalp',
                'Movimiento.pesoneto',
                'Movimiento.pesototal',
                'Movimiento.pesoparcial',
                'Movimiento.lugare_id',
                'Movimiento.user_id'),
            'conditions' => array('Movimiento.id' => $movimiento[0]['cod'])));
        return $ultimoMovimiento;
    }

    public function ingresainsumo()
    {
        //debug($this->data);
        $cantidad = $this->request->data['Movimientos']['cantidad'];
        $insumo = $this->request->data['Movimientos']['insumo_id'];

        $ultimoMovimiento = $this->_getUltimoMovimiento($insumo);
        $total = $ultimoMovimiento['Movimiento']['total'];

        $nuevoTotal = $total + $cantidad;

        $this->request->data = "";
        $this->request->data['Movimiento']['insumo_id'] = $insumo;
        $this->request->data['Movimiento']['ingreso'] = $cantidad;
        $this->request->data['Movimiento']['salida'] = 0;
        $this->request->data['Movimiento']['total'] = $nuevoTotal;
        $this->request->data['Movimiento']['lugare_id'] = $ultimoMovimiento['Movimiento']['lugare_id'];
        $this->request->data['Movimiento']['user_id'] = 1;

        //debug($this->request->data);exit;

        $this->Movimiento->create();
        if ($this->Movimiento->save($this->request->data))
        {
            $this->Session->setFlash('Ingreso registrado con exito!', 'alerts/bueno');
            $this->redirect(array('controller' => 'Insumos', 'action' => 'index'));
        } else
        {
            $this->Session->setFlash('No se guardo!', 'alerts/bueno');
        }
    }

    public function ajaxingreso($idInsumo = null)
    {

        $this->layout = 'ajax';

        if (!empty($this->request->data))
        {


            $insumo = $this->Insumo->find('first', array('conditions' => array('Insumo.id' => $idInsumo)));
            $peso = $insumo['Insumo']['cantidadtotal'];

            $lugar = $this->request->data['Movimiento']['lugare_id'];
            $cantidad = $this->request->data['Movimiento']['ingreso'];

            $ultimoMovimientolugar = $this->_getUltimoMovimientoLugar($idInsumo, $lugar);
            $ultimoMovimiento = $this->_getUltimoMovimiento($idInsumo);

            $total = $ultimoMovimiento['Movimiento']['total'];

            $totalParcial = $ultimoMovimientolugar['Movimiento']['totalp'];
            $totalingresos = $total + $totalParcial;
            $pesototal = $ultimoMovimiento['Movimiento']['pesototal'];
            $pesoparcial = $ultimoMovimientolugar['Movimiento']['pesoparcial'];

            $this->request->data['Movimiento']['totalp'] = $totalParcial + $cantidad;
            $this->request->data['Movimiento']['total'] = $total + $cantidad;
            $this->request->data['Movimiento']['pesototal'] = $pesototal;
            $this->request->data['Movimiento']['pesoparcial'] = $pesoparcial;
            $this->request->data['Movimiento']['pesoneto'] = $peso;
            $this->request->data['Movimiento']['user_id'] = $this->Session->read('Auth.User.id');

            $this->Movimiento->create();

            if ($this->Movimiento->save($this->request->data))
            {
                $this->Session->setFlash('Ingreso realizado');
                $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
            } else
            {
                $this->Session->setFlash('Error en el registro!!!!');
                $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
            }
        }

        $ultimoMovimiento = $this->_getUltimoMovimiento($idInsumo);

        $insumo = $this->Insumo->find('first', array(
            'recursive' => -1,
            'conditions' => array('id' => $idInsumo)
                ));

        $dcl = $this->Lugare->find('all', array(
            'recursive' => -1,
            'fields' => array('id', 'nombre'),
            'conditions' => array('estado' => 1)));

        //$idUsuario = 
        $this->set(compact('ultimoMovimiento', 'dcl', 'insumo'));
    }

    public function ajaxsalida($idInsumo = null)
    {
        $this->layout = 'ajax';

        $insumo = $this->Insumo->find('first', array(
            'recursive' => -1,
            'conditions' => array('Insumo.id' => $idInsumo)
                ));

        $dcSalidas = $this->Tiposalida->find('all', array(
            'recursive'=>-1,            
        ));

        if (!empty($this->request->data))
        {

            $cantidad = $this->request->data['Movimiento']['salida'];
            $lugar = $this->request->data['Movimiento']['lugare_id'];

            $ultimoMovimientolugar = $this->_getUltimoMovimientoLugar($idInsumo, $lugar);

            $totalParcial = $ultimoMovimientolugar['Movimiento']['totalp'];

            if ($cantidad <= $totalParcial)
            {

                $ultimoMovimiento = $this->_getUltimoMovimiento($idInsumo);
                $total = $ultimoMovimiento['Movimiento']['total'] - $cantidad;
                $pesototal = $ultimoMovimiento['Movimiento']['pesototal'];
                $pesoparcial = $ultimoMovimientolugar['Movimiento']['pesoparcial'];
                $peso = $ultimoMovimientolugar['Movimiento']['pesoneto'];
                $this->request->data['Movimiento']['totalp'] = $totalParcial - $cantidad;
                $this->request->data['Movimiento']['total'] = $total;
                $this->request->data['Movimiento']['pesototal'] = $pesototal;
                $this->request->data['Movimiento']['pesoparcial'] = $pesoparcial;
                $this->request->data['Movimiento']['pesoneto'] = $peso;
                $this->request->data['Movimiento']['usuario_id'] = $this->Session->read('Auth.User.id');

                $this->Movimiento->create();

                if ($this->Movimiento->save($this->request->data))
                {
                    $this->Session->setFlash('Salida registrada!!', 'alerts/bueno');
                    $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
                } else
                {
                    $this->Session->setFlash('Error en el registro!!!!', 'alerts/alert');
                    $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
                }
            } else
            {
                $this->Session->setFlash('No exiten ' . $cantidad . ' ' . $insumo['Insumo']['nombre']);
                $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
            }
        }


        $dcl = $this->Lugare->find('all', array(
            'recursive' => -1,
            'fields' => array('id', 'nombre'),
            'conditions' => array('estado' => 1)));

        //$idUsuario = 
        $this->set(compact('dcl', 'insumo', 'dcSalidas'));
    }

    public function _getUltimoMovimientoLugar($idInsumo = null, $lugar = null)
    {

        $movimiento = $this->Movimiento->find('first', array(
            'recursive' => -1,
            'fields' => array('MAX(id) as cod'),
            'conditions' => array('Movimiento.insumo_id' => $idInsumo, 'Movimiento.lugare_id' => $lugar)));

        $ultimoMovimientoLugar = $this->Movimiento->find('first', array(
            'recursive' => -1,
            'fields' => array(
                'Movimiento.id',
                'Movimiento.insumo_id',
                'Movimiento.ingreso',
                'Movimiento.salida',
                'Movimiento.total',
                'Movimiento.totalp',
                'Movimiento.pesoneto',
                'Movimiento.pesototal',
                'Movimiento.pesoparcial',
                'Movimiento.totalp',
                'Movimiento.lugare_id',
                'Movimiento.user_id'),
            'conditions' => array('Movimiento.id' => $movimiento[0]['cod'])));
        return $ultimoMovimientoLugar;
    }

    public function ajaxcantidad($idInsumo = null, $idLugar = null)
    {
        $this->layout = 'ajax';

        $ultimoMovimientolugar = $this->_getUltimoMovimientoLugar($idInsumo, $idLugar);

        $cantidad = $ultimoMovimientolugar['Movimiento']['totalp'];

        $this->set(compact('cantidad'));
    }

    public function ajaxtransferencia($idInsumo = null)
    {
        $this->layout = 'ajax';

        $insumo = $this->Insumo->find('first', array(
            'recursive' => -1,
            'conditions' => array('Insumo.id' => $idInsumo)
                ));

        if (!empty($this->request->data))
        {

            $idInsumo = $this->request->data['Movimiento']['id_insumo'];
            $cantidad = $this->request->data['Movimiento']['salida'];
            $desde = $this->request->data['Movimiento']['desde'];
            $hasta = $this->request->data['Movimiento']['hasta'];
            $observaciones = $this->request->data['Movimiento']['observaciones'];

            $ultimoMovimientolugar = $this->_getUltimoMovimientoLugar($idInsumo, $desde);

            $pesoparcial2 = $ultimoMovimientolugar['Movimiento']['pesoparcial'];


            $totalParcial = $ultimoMovimientolugar['Movimiento']['totalp'];

            if ($cantidad <= $totalParcial)
            {

                $ultimoMovimiento = $this->_getUltimoMovimiento($idInsumo);
                $total = $ultimoMovimiento['Movimiento']['total'];

                $ultimoMovimientolugar2 = $this->_getUltimoMovimientoLugar($idInsumo, $hasta);
                $totalp = $ultimoMovimientolugar2['Movimiento']['totalp'];

                $pesototal = $ultimoMovimiento['Movimiento']['pesototal'];
                $pesoparcial = $ultimoMovimientolugar2['Movimiento']['pesoparcial'];
                $peso = $ultimoMovimiento['Movimiento']['pesoneto'];

                $this->request->data = "";
                $this->request->data['Movimiento']['insumo_id'] = $idInsumo;
                $this->request->data['Movimiento']['lugare_id'] = $hasta;
                $this->request->data['Movimiento']['totalp'] = $totalp + $cantidad;
                $this->request->data['Movimiento']['total'] = $total;
                $this->request->data['Movimiento']['salida'] = 0;
                $this->request->data['Movimiento']['ingreso'] = $cantidad;
                $this->request->data['Movimiento']['pesototal'] = $pesototal;
                $this->request->data['Movimiento']['pesoparcial'] = $pesoparcial;
                $this->request->data['Movimiento']['pesoneto'] = $peso;
                $this->request->data['Movimiento']['usuario_id'] = $this->Session->read('Auth.User.id');

                $this->Movimiento->create();

                if ($this->Movimiento->save($this->request->data))
                {

                    $this->request->data = "";
                    $this->request->data['Movimiento']['insumo_id'] = $idInsumo;
                    $this->request->data['Movimiento']['lugare_id'] = $desde;
                    $this->request->data['Movimiento']['totalp'] = $totalParcial - $cantidad;
                    $this->request->data['Movimiento']['total'] = $total;
                    $this->request->data['Movimiento']['salida'] = $cantidad;
                    $this->request->data['Movimiento']['ingreso'] = 0;
                    $this->request->data['Movimiento']['pesototal'] = $pesototal;
                    $this->request->data['Movimiento']['pesoparcial'] = $pesoparcial2;
                    $this->request->data['Movimiento']['pesoneto'] = $peso;
                    $this->request->data['Movimiento']['usuario_id'] = $this->Session->read('Auth.User.id');

                    $this->Movimiento->create();
                    if ($this->Movimiento->save($this->request->data))
                    {
                        $aa = 1;
                    } else
                    {
                        $aa = 0;
                    }
                    if ($aa)
                    {
                        $this->request->data = "";
                        $this->request->data['Transferencia']['insumo_id'] = $idInsumo;
                        $this->request->data['Transferencia']['cantidad'] = $cantidad;
                        $this->request->data['Transferencia']['lugar1'] = $desde;
                        $this->request->data['Transferencia']['lugar2'] = $hasta;
                        $this->request->data['Transferencia']['observaciones'] = $observaciones;

                        $this->Transferencia->create();

                        if ($this->Transferencia->save($this->request->data))
                        {
                            $a = 1;
                        } else
                        {
                            $a = 0;
                        }

                        if ($a)
                        {
                            $this->Session->setFlash('Transferencia realizada!!', 'bueno');
                            $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
                        } else
                        {
                            $this->Session->setFlash('Error en el registro!!!!', 'alert');
                            $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
                        }
                    } else
                    {
                        $this->Session->setFlash('Error en el registro!!!!', 'alert');
                        $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
                    }
                } else
                {
                    $this->Session->setFlash(
                            'Error en el registro!!!!', 'alert');
                    $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
                }
            } else
            {
                $this->Session->setFlash('No exiten ' . $cantidad . ' de ' . $insumo['Insumo']['nombre'] . ' para poder transferir', 'alert');
                $this->redirect(array('controller' => 'insumos', 'action' => 'index'));
            }
        }


        $dcl = $this->Lugare->find('all', array(
            'recursive' => -1,
            'fields' => array('id', 'nombre'),
            'conditions' => array('estado' => 1)));

        //$idUsuario = 
        $this->set(compact('dcl', 'insumo'));
    }

    function categorias()
    {
        $datos = $this->Migralmacen->find('all', array(
            'group' => array('Migralmacen.categoria')
                ));
        //debug($datos);exit;


        foreach ($datos as $data)
        {
            $this->request->data['Categoria']['nombre'] = $data['Migralmacen']['categoria'];
            $this->request->data['Categoria']['estado'] = 1;
            $this->Categoria->create();
            $this->Categoria->save($this->request->data);
        }
    }

    function actualiza()
    {
        $datitos = $this->Migralmacen->find('all', array(
            'fields' => array('Migralmacen.id', 'Migralmacen.categoria_id', 'Migralmacen.categoria'),
            'recursive' => -1));
        $categorias = $this->Categoria->find('all', array('recursive' => -1));


        foreach ($datitos as $dato)
        {
            foreach ($categorias as $categoria)
            {
                if ($categoria['Categoria']['nombre'] == $dato['Migralmacen']['categoria'])
                {
                    $id = $dato['Migralmacen']['id'];
                    $categoria = $categoria['Categoria']['id'];

                    $data = array('id' => $id, 'categoria_id' => $categoria);

                    $this->Migralmacen->save($data);
                }
            }
        }
        $datitos = $this->Migralmacen->find('all', array(
            'fields' => array('Migralmacen.id', 'Migralmacen.categoria_id', 'Migralmacen.categoria'),
            'recursive' => -1));
        debug($datitos);
        exit;
    }

    function migracion()
    {
        $datitos = $this->Migralmacen->find('all', array(
            'recursive' => -1));
        $this->set(compact('datitos'));
    }

}
